import { UseSaveSpecifyIntegerAndDecimal } from './types'
import { useJudgeInputValIsEffective } from './useInput'

/**
 * 保留指定位数的整数和小数
 * @param {(string|number)} source - 原数字
 * @param {UseSaveSpecifyIntegerAndDecimal} config - 格式化配置
 * @param {Number} config.max - 最大值
 * @param {Number} config.min - 最小值
 * @param {Number} config.integerNum - 整数位数
 * @param {Number} config.decimalNum - 小数位数
 */
export const useSaveSpecifyIntegerAndDecimal = (
  source: string | number,
  config?: UseSaveSpecifyIntegerAndDecimal,
) => {
  const number = String(source)

  if (!useJudgeInputValIsEffective(number)) {
    return ''
  }

  let integerNum = 100
  let decimalNum = 2
  let max = 999999999

  if (config && useJudgeInputValIsEffective(String(config.max))) {
    max = config.max
  }

  if (Number(number) >= max) {
    return max.toString()
  }

  if (config && useJudgeInputValIsEffective(String(config.min)) && Number(number) <= config.min) {
    return config.min.toString()
  }

  if (config && useJudgeInputValIsEffective(String(config.integerNum))) {
    integerNum = config.integerNum
  }

  if (config && !useJudgeInputValIsEffective(String(config.decimalNum))) {
    decimalNum = config.decimalNum
  }

  const integer = number.split('.')[0]
  const newInteger = parseInt(integer).toString().substring(0, integerNum)
  if (!number.includes('.')) {
    return newInteger.toString()
  }

  const decimal = number.split('.')[1]
  if (isNaN(parseInt(decimal))) {
    return `${newInteger}.`
  } else {
    const newDecimal = parseInt(decimal).toString().substring(0, decimalNum)
    return `${newInteger}.${newDecimal}`
  }
}
